/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.asistencia.DAO;

import com.asistencia.DAO.factory.FactoryDAO;
import com.asistencia.DAO.utils.Connector;
import com.asistencia.DAO.utils.InterfaceDAO;
import com.asistencia.model.Funcionario;
import com.asistencia.model.Modulo;
import com.asistencia.model.Perfil;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author rfarias
 */
public class FuncionarioDAO  implements InterfaceDAO{

    public List findAll() {
        Funcionario fun = null;
        ArrayList<Funcionario> listafun = new ArrayList<Funcionario>();
        try{
            ResultSet rs = Connector.getStatement().executeQuery("select * from funcionarios");
            while(rs.next())
            {
                Perfil per = (Perfil) FactoryDAO.getInstance().getDataPer().searchById(Integer.parseInt(""+rs.getLong("perfil")));
                //JOptionPane.showMessageDialog(null, rs.getLong("perfil"));
                fun = new Funcionario(
                        rs.getString("rut"),
                        rs.getString("nombre"),
                        rs.getString("correo"),
                        rs.getString("ruta"),
                        rs.getString("clave"),
                        per
                        );
                listafun.add(fun);
            }
        } catch (Exception ex){
            System.out.println("ERROR: FuncionarioDAO - Method: findAll - Exception: " + ex.getMessage());
        } finally {
        return listafun;
        }
    }


    public Object searchById(String id) {
        Funcionario fun = null;
        try{
            ResultSet rs = Connector.getStatement().executeQuery("select * from funcionarios where rut = '" + id+"'");
            if(rs.next())
            {
                Perfil per = (Perfil) FactoryDAO.getInstance().getDataPer().searchById(Integer.parseInt(""+rs.getLong("perfil")));
                fun = new Funcionario(
                        rs.getString("rut"),
                        rs.getString("nombre"),
                        rs.getString("correo"),
                        rs.getString("ruta"),
                        rs.getString("clave"),
                        per
                        );
            }
        } catch (Exception ex){
            System.out.println("ERROR: FuncionarioDAO - Method: findAll - Exception: " + ex.getMessage());
        } finally {

            return fun;
        }
    }

    public Object update(Object obj) {

        Funcionario fun = (Funcionario)obj;
        Statement st = Connector.getStatement();
        StringBuilder sb = new StringBuilder();
        sb.append("update funcionarios set ");
        sb.append ("rut='");        sb.append(fun.getRut_funcionario());        sb.append("', ");
        sb.append ("nombre='");     sb.append(fun.getNombres());                sb.append("', ");
        sb.append ("correo='");     sb.append(fun.getCorreo());                 sb.append("', ");
        sb.append ("clave='");      sb.append(fun.getPassword());               sb.append("', ");
        sb.append ("ruta='");       sb.append(fun.getRuta());                   sb.append("', ");
        sb.append ("perfil=");       sb.append(fun.getPerfil().getId_perfil()); sb.append(" ");
        sb.append ("where rut ='"); sb.append(fun.getRut_funcionario());        sb.append("'");
        try {
            int res = st.executeUpdate(sb.toString());
            if (res==1)
            {
                return fun;
            }
            else
            {
                return null;
            }
        } catch (SQLException ex) {
           System.out.println("ERROR: FuncionarioDAO - Method: update - Exception: " + ex.getMessage());
           return null;
        }
    }

    public Object insert(Object obj) {
        Funcionario fun = (Funcionario)obj;
        try{
            StringBuilder sb = new StringBuilder();
            sb.append("insert into funcionarios (rut, nombre, correo, clave, ruta,perfil) values(");
	      sb.append("'");sb.append(fun.getRut_funcionario());         sb.append("',");
            sb.append("'");sb.append(fun.getNombres());                 sb.append("',");
            sb.append("'");sb.append(fun.getCorreo());                  sb.append("',");
            sb.append("'");sb.append(fun.getPassword());                sb.append("',");
            sb.append("'");sb.append(fun.getRuta());                    sb.append("',");
            sb.append(" ");sb.append(fun.getPerfil().getId_perfil());   sb.append(" )");

            Statement st = Connector.getStatement();
            int res = st.executeUpdate(sb.toString(), Statement.RETURN_GENERATED_KEYS);
            ResultSet rs = st.getGeneratedKeys();
        } catch (Exception ex){
            System.out.println("ERROR: FuncionarioDAO - Method: insert - Exception: " + ex.getMessage());
        } finally {
            return fun.getRut_funcionario() != null ? searchById(fun.getRut_funcionario()) : null;
        }
    }

    public boolean delete(Object obj) {
        Funcionario fun = (Funcionario) obj;
        Statement st = Connector.getStatement();
        try {
            int res = st.executeUpdate("delete from funcionarios where rut='"+fun.getRut_funcionario()+"'");
             if (res>0)
                {
                   return true;
                }
             else
                {
                    return false;
                }
        } catch (SQLException ex) {
            System.out.println("ERROR: FuncionarioDAO - Method: delete - Exception: " + ex.getMessage());
            return false;
        }
    }

    
    public List ListaPorRuta(String ruta) {
        Funcionario fun;
        List<Funcionario> listafun = new ArrayList<Funcionario>();
        try{
            String qry = "select * from funcionarios where ruta='"+ruta+"'";
            ResultSet rs = Connector.getStatement().executeQuery(qry.toString());
            //System.out.println(qry);
            while(rs.next())
            {
                Perfil per = (Perfil) FactoryDAO.getInstance().getDataPer().searchById(Integer.parseInt(""+rs.getLong("perfil")));
                //JOptionPane.showMessageDialog(null, rs.getLong("perfil"));
                fun = new Funcionario(
                        rs.getString("rut"),
                        rs.getString("nombre"),
                        rs.getString("correo"),
                        rs.getString("ruta"),
                        rs.getString("clave"),
                        per
                        );
                System.out.println(rs.getString("rut")+" - "+rs.getString("nombre")+" - "+rs.getString("correo")+" - "+rs.getString("ruta")+" - "+rs.getString("clave")+" -- "+per.getDescripcion());
                listafun.add(fun);
            }
        } catch (Exception ex){
            System.out.println("ERROR: FuncionarioDAO - Method: ListaPorRuta - Exception: " + ex.getMessage()+ " - "+ex.toString()+" - "+ex.getLocalizedMessage());
        } finally {
        return listafun;
        }
    }    
    
}
